package a06_BlockQueue;

import java.util.LinkedList;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

/**
 * @Author quan
 * @Description 演示JDK中的阻塞队列
 * @Date 2023/5/7 15:08
 */
public class a01_BlockQueue {
    public static void main(String[] args) throws InterruptedException {
        //基于链表实现的BlockingQueue：还有其他的LinkedBlockingQueue, ArrayBlockingQueue
        //1、创建的时候指定队列的容量：当队列满的时候再插入元素就会阻塞
        BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(3);
        //2、往队列中写入元素
        queue.put(1);
        queue.put(2);
        queue.put(3);
        System.out.println("插入了3个元素");
        System.out.println(queue);
        //3、队列已满，此时会阻塞，不会打印下面这句话
//        queue.put(4);
//        System.out.println("插入了4个元素");
        //4、阻塞队列中取出元素
        System.out.println("获取的第一个元素是"+queue.take());
        System.out.println("获取的第二个元素是"+queue.take());
        System.out.println("获取的第三个元素是"+queue.take());
        //此时队列已经空了，进入阻塞状态
        System.out.println("获取的第四个元素是"+queue.take());
    }
}
